package com.yh.consumer;

import com.rabbitmq.client.Channel;
import org.apache.log4j.Logger;

import java.io.IOException;

/**
 * @author yuhuan
 * @date 2022/01/13
 */
public abstract class BaseMqConsumer {
    /**
     * 日志
     */
    private static final Logger logger = Logger.getLogger(BaseMqConsumer.class);

    /**
     * 消息确认
     */
    public void messageConfirmation(Channel channel, long deliveryTag) {
        try {
            // 不将此消息交给其他消费者重复消费
            channel.basicAck(deliveryTag, false);
            logger.info("消息已确认！其他消费者将无法重复消费");
        } catch (IOException e) {
            try {
                // 消息如果消费失败，将消息重新放到队列排队
                channel.basicNack(deliveryTag, false, true);
                logger.warn(">>>>> 消息确认失败！消息归队了，但是其他消费者无法消费该消息");
            } catch (IOException e1) {
                logger.error(">>>>> 无法完成消息确认！");
            }
        }
    }
}
